/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package sv.com.intesal.compra.managed;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import sv.com.intesal.clases.LimpiarManaged;
import sv.com.intesal.clases.Mensaje;
import sv.com.intesal.compra.bean.Ajuste;
import sv.com.intesal.compra.bean.Material;
import sv.com.intesal.compra.controlador.AjusteControlador;
import sv.com.intesal.compra.controlador.MaterialControlador;
import sv.com.intesal.seguridad.controlador.SessionControlador;
import sv.com.intesal.seguridad.managed.SessionManaged;

/**
 *
 * @author JM
 */
@ManagedBean(name = "ajusteManaged")
@ViewScoped
public class AjusteManaged implements Serializable {

    private Material selectedMaterial;
    private Mensaje m;
    private SessionManaged sm;
    private Boolean flag_1;
    private Boolean flag_2;

    /*ENCA*/
    private Ajuste selectedAjuste;

    /*DETA*/
    private List<Ajuste> detaAjuste;
    private Ajuste selectedDetaAjuste;

    public AjusteManaged() {
        this.selectedAjuste = new Ajuste();
        this.selectedMaterial = new Material();
        this.selectedDetaAjuste = new Ajuste();

        m = new Mensaje();
        sm = new SessionManaged();

        this.flag_1 = true;
        this.flag_2 = false;
    }

    public void mantenimientoAjuste() {

        try {
            if (this.validar() == true) {
                if (this.selectedAjuste.getId_aj() == null) {
                    if (sm.validar_rol_usuario("wfrmAjuste", sm.agregar) == true) {
                        AjusteControlador aj = new AjusteControlador();
                        aj.setEncaAjuste(this.selectedAjuste, this.detaAjuste);
                        LimpiarManaged.limpiar();
                    }
                } else {
                    if (sm.validar_rol_usuario("wfrmAjuste", sm.modificar) == true) {
                        AjusteControlador aj = new AjusteControlador();
                        aj.setEncaAjuste(this.selectedAjuste, this.detaAjuste);
                        LimpiarManaged.limpiar();
                    }
                }
            }
        } catch (Exception ex) {
            m.messageError(m.getIerror());
            ex.printStackTrace();
        }
    }

    private Boolean validar() throws Exception {

        try {
            Boolean value = true;

            if (this.getSelectedAjuste().getFecha_aj() == null) {
                m.messageAdvertencia(m.campoError("FECHA"));
                value = false;
            }
            if (this.getSelectedAjuste().getDescripcion_aj() == "") {
                m.messageAdvertencia(m.campoError("DESCRIPCION"));
                value = false;
            }

            if (this.detaAjuste == null) {
                m.messageError("NO HAY MATERIALES");
                value = false;
            } else if (this.detaAjuste.size() > 0) {
                for (int i = 0; i < this.detaAjuste.size(); i++) {
                    if (this.detaAjuste.get(i).getCantidad_d() <= 0) {
                        value = false;
                        m.messageAdvertencia("CANTIDAD DEBE SER MAYOR QUE CERO");
                        break;
                    } else if (this.detaAjuste.get(i).getTipo_d().equals("Salida")) {
                        /*VALIDAR SI EXISTE CANTIDAD SUCIFICIENTE*/
                        MaterialControlador mc = new MaterialControlador();
                        if (mc.validar_cantidad(this.detaAjuste.get(i).getId_dm(), this.detaAjuste.get(i).getCantidad_d()) == false) {
                            value = false;
                            m.messageAdvertencia(m.getIcantidad() + ": " + this.detaAjuste.get(i).getNombre_m());
                        }
                    }
                }
            }
            return value;
        } catch (Exception e) {

            throw new Exception(e);
        }
    }

    public void getMaterial_Quick(Material ma) {

        try {
            this.selectedMaterial = ma;
            if (this.getSelectedMaterial() != null) {
                List<Ajuste> lista = new ArrayList<Ajuste>();
                if (this.detaAjuste != null) {
                    lista = this.detaAjuste;
                }

                Ajuste aj = new Ajuste();
                aj.setNombre_m(this.getSelectedMaterial().getNombre_m());
                aj.setId_d(0);
                aj.setId_dm(this.getSelectedMaterial().getId_dm());
                aj.setCantidad_d(0.0);
                aj.setTipo_d("Entrada");
                lista.add(aj);
                this.detaAjuste = lista;
            }
        } catch (Exception e) {
            m.messageError(m.getIerror());
            e.printStackTrace();
        }
    }

    public void eliminarRegistro() {
        try {
            if (this.selectedDetaAjuste == null) {
                m.messageError("DEBE ELEGIR UN REGISTRO PARA CONTINUAR");
            } else if (selectedDetaAjuste.getId_d() == 0) {
                this.detaAjuste.remove(selectedDetaAjuste);
                m.messageInfo(m.getIeliminada());
            } else {
                /*SI AFECTA INVENTARIO*/
                if (sm.validar_rol_usuario("wfrmAjuste", sm.eliminar) == true) {
                    AjusteControlador ac = new AjusteControlador();
                    selectedDetaAjuste.setNumero_documento_aj(this.selectedAjuste.getNumero_documento_aj());
                    selectedDetaAjuste.setBloque_aj(this.selectedAjuste.getBloque_aj());
                    selectedDetaAjuste.setId_aj(this.selectedAjuste.getId_aj());

                    this.detaAjuste.remove(selectedDetaAjuste);
                    ac.setEliminarItem(selectedDetaAjuste);
                }
            }
        } catch (Exception e) {
            m.messageError(m.getIerror());
            e.printStackTrace();
        }
    }

    public void validarModificarProceso() {
        /*VER SI EXISTE CODIGO PARA MODIFICAR PROCESO*/
        try {
            SessionControlador sc = new SessionControlador();
            if (sc.getCodigo_Proceso_Modificar() != 0) {
                this.flag_1 = false;
                this.flag_2 = true;

                AjusteControlador ac = new AjusteControlador();
                this.selectedAjuste = ac.getEnca(sc.getCodigo_Proceso_Modificar());
                this.detaAjuste = ac.getDeta_Ajuste(this.selectedAjuste.getId_aj());

                sc.setCodigo_Proceso_Modificar(0);
            }
        } catch (Exception e) {
            e.printStackTrace();
            m.messageError(m.getIerror());
        }
    }

    /*
    SETTERS AND GETTERS
     */
    public Boolean getFlag_1() {
        return flag_1;
    }

    public void setFlag_1(Boolean flag_1) {
        this.flag_1 = flag_1;
    }

    public Boolean getFlag_2() {
        return flag_2;
    }

    public void setFlag_2(Boolean flag_2) {
        this.flag_2 = flag_2;
    }

    public List<Ajuste> getDetaAjuste() {
        return detaAjuste;
    }

    public void setDetaAjuste(List<Ajuste> detaAjuste) {
        this.detaAjuste = detaAjuste;
    }

    public Ajuste getSelectedAjuste() {
        if (selectedAjuste == null) {
            selectedAjuste = new Ajuste();
        }
        return selectedAjuste;
    }

    public void setSelectedAjuste(Ajuste selectedAjuste) {
        this.selectedAjuste = selectedAjuste;
    }

    public Ajuste getSelectedDetaAjuste() {
        if (selectedDetaAjuste == null) {
            selectedDetaAjuste = new Ajuste();
        }
        return selectedDetaAjuste;
    }

    public void setSelectedDetaAjuste(Ajuste selectedDetaAjuste) {
        this.selectedDetaAjuste = selectedDetaAjuste;
    }

    public Material getSelectedMaterial() {
        if (selectedMaterial == null) {
            selectedMaterial = new Material();
        }
        return selectedMaterial;
    }

    public void setSelectedMaterial(Material selectedMaterial) {
        this.selectedMaterial = selectedMaterial;
    }
}
